#include <iostream>
#include <vector>
#include "math.h"

using namespace std;


/**
 * 给定一个3行N列的数组，每1列选1个数，求所有相邻列的差的绝对值的和最小值。
 */
long long minval(vector<vector<long long>> &M) {
    if (M.size() == 0) return 0;
    long long dp[3] = {0};  // 记录横向相邻位置差值
    long long tmp[3];
    for (int i=0; i<M[0].size(); ++i) {
        for (int j=0; j<3; ++j) {
            tmp[j] = min(min(abs(M[j][i] - M[0][i-1]) + dp[0],
                            abs(M[j][i] - M[1][i-1]) + dp[1]),
                            abs(M[j][i] - M[2][i-1]) + dp[2]);
        }
        for(int j = 0; j < 3; j++) {
            dp[j] = tmp[j];
        }
    }
    return min(min(dp[0], dp[1]), dp[2]);
}
